<?php


namespace app\common\session;


use app\common\service\Redis;

class Handle implements \SessionHandlerInterface
{
    private $saveTimestamp = 3600;

    /**
     * 类似于类的构造函数， session_start()后第一个被调用。
     *
     * @inheritDoc
     */
    public function open($save_path, $name)
    {
        // TODO: Implement open() method.
    }

    /**
     * 获取会话数据，执行open()之后被调用
     * 如果会话中有数据，read 回调函数必须返回将会话数据编码（序列化）后的字符串。 如果会话中没有数据，read 回调函数返回空字符串。
     * @inheritDoc
     */
    public function read($session_id)
    {
        // TODO: Implement read() method.
    }

    /**
     * 会话保存数据时会调用 write 回调函数。
     * session_write_close() -> write() -> close()
     * @inheritDoc
     */
    public function write($session_id, $session_data)
    {
        // TODO: Implement write() method.
        return Redis::getRedis()->setex($session_id, $this->saveTimestamp, $session_data);
    }

    /**
     * 类似于类的析构函数，session_write_close()后被调用。
     * @inheritDoc
     */
    public function close()
    {
        // TODO: Implement close() method.
        return true;
    }

    /**
     * 当调用 session_destroy() 函数， 或者调用 session_regenerate_id() 函数并且设置 destroy 参数为 TRUE 时， 会调用此回调函数。此回调函数操作成功返回 TRUE，反之返回 FALSE。
     * @inheritDoc
     */
    public function destroy($session_id)
    {
        // TODO: Implement destroy() method.
        return true;
    }

    /**
     * 为了清理会话中的旧数据，PHP 会不时的调用垃圾收集回调函数。 调用周期由 session.gc_probability 和 session.gc_divisor 参数控制。 传入到此回调函数的 lifetime 参数由 session.gc_maxlifetime 设置。 此回调函数操作成功返回 TRUE，反之返回 FALSE。
     * @inheritDoc
     */
    public function gc($maxlifetime)
    {
        // TODO: Implement gc() method.
        return true;
    }

}

$handler = new Handle();
session_set_save_handler($handler, true);
session_start();
